package Thread;
import java.util.Scanner;
/**notify 唤醒一个线程：
 * 1.搭配wait使用
 * 2.必须针对同一对象
 * 3.wait前notify后*/

public class demo24 {
    public static void main(String[] args) {
        Object locker1 = new Object();
        Thread t1 = new Thread(()->{
            try {
                Thread.sleep(1000);
                System.out.println("wait之前");
                synchronized (locker1) {
                    locker1.wait();
                }
                System.out.println("wait之后");
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });

        Thread t2 = new Thread(()-> {
            // 等待IO，进入阻塞，确保线程2的notify值线程1的wait之前
            Scanner scanner = new Scanner(System.in);
            System.out.println("输入任意内容，唤醒线程");
            scanner.next();
            synchronized (locker1) {
                // 必须是针对的同一个对象，在Java中，强制要求notify搭配synchronized
                // 如果不是相同对象，则没有任何相互的影响和作用
                locker1.notify();
            }
        });

        t1.start();
        t2.start();
    }
}
